home *** CD-ROM | disk | FTP | other *** search
- /* $Revision Header *** Header built automatically - do not edit! ***********
- *
- * (C) Copyright 1991 by Torsten Jürgeleit
- *
- * Name .....: edit2.c
- * Created ..: Sunday 22-Dec-91 21:22:22
- * Revision .: 2
- *
- * Date Author Comment
- * ========= ==================== ====================
- * 02-Oct-92 Michael Bjerking New realese, better Screen/Window editor
- * 31-Dec-91 Torsten Jürgeleit new font management
- * 22-Dec-91 Torsten Jürgeleit Created this file!
- *
- ****************************************************************************
- *
- * Edit ISUP objects - part 2
- *
- * $Revision Header ********************************************************/
-
- /* Includes */
-
- #include "includes.h"
- #include "defines.h"
- #include "imports.h"
- #include "protos.h"
-
- /* Defines */
-
- #define EDIT_MODE_NORMAL 1
- #define EDIT_MODE_SPECIAL 2
-
- /* Defines */
-
- #define EDIT_TITLE_LEFT_EDGE 0
- #define EDIT_TITLE_TOP_EDGE 5
- #define EDIT_TITLE_TYPE TEXT_DATA_TYPE_TEXT
- #define EDIT_TITLE_FLAGS (TEXT_DATA_FLAG_CENTER | TEXT_DATA_FLAG_BOLD)
- #define EDIT_TITLE_TEXT_ATTR &topaz80_attr
-
- /* Edit template data */
-
- SHORT
- edit_template_data_action(struct Template * old_tp, APTR normal_gl,
- APTR special_gl1, APTR special_gl2, APTR edit_gl)
- {
- struct TemplateList *tl = &template_list;
- struct Template *new_tp;
- SHORT status = EDITOR_STATUS_NORMAL;
-
- /* Make clone of selected template and remove it from template list */
- if (!(new_tp = clone_template(tl, old_tp, TRUE)))
- {
- status = EDITOR_ERROR_OUT_OF_MEM;
- }
- else
- {
- struct Template *pred_tp;
- struct MsgPort *up = ewin->UserPort;
- USHORT mode = EDIT_MODE_NORMAL, new_mode = EDIT_MODE_NORMAL;
- BOOL exit = FALSE;
-
- /* Save previous template for Insert() and remove old template from list */
- pred_tp = get_pred(&old_tp->tp_Node);
- Remove(&old_tp->tp_Node);
-
- /* Outer loop */
- do
- {
- BYTE title[80];
- BOOL keepon = TRUE;
-
- /* Init title text */
- switch (TEMPLATE_GROUP(old_tp))
- {
- case TEMPLATE_GROUP_BORDER:
- strcpy(&title[0], "Edit Border Data");
- break;
-
- case TEMPLATE_GROUP_TEXT:
- strcpy(&title[0], "Edit Text Data");
- break;
-
- case TEMPLATE_GROUP_GADGET:
- if (mode == EDIT_MODE_NORMAL)
- {
- sprintf(&title[0], "Edit normal %s Gadget Data",
- template_type_text_array[old_tp->tp_Type]);
- }
- else
- {
- sprintf(&title[0], "Edit special %s Gadget Data",
- template_type_text_array[old_tp->tp_Type]);
- }
- break;
- }
-
- /* Init edit display */
- IClearWindow(eri, ewin, 0, 0, EDITOR_WINDOW_WIDTH,
- EDITOR_WINDOW_HEIGHT, 0);
- IPrintText(eri, ewin, &title[0], EDIT_TITLE_LEFT_EDGE,
- EDIT_TITLE_TOP_EDGE, EDIT_TITLE_TYPE, EDIT_TITLE_FLAGS,
- EDIT_TITLE_TEXT_ATTR);
- if (mode == EDIT_MODE_NORMAL)
- {
- IDisplayGadgets(ewin, normal_gl);
- }
- else
- {
- if (special_gl1)
- {
- ISetGadgetAttributes(special_gl1, 0, 0L, 0L, USE_CURRENT_VALUE,
- USE_CURRENT_VALUE, &new_tp->tp_TextList);
- change_text_list_editor_mode(special_gl1, DEFAULT_LIST_MODE);
- IDisplayGadgets(ewin, special_gl1);
- }
- if (special_gl2)
- {
- IDisplayGadgets(ewin, special_gl2);
- }
- }
- IDisplayGadgets(ewin, edit_gl);
-
- /* Inner loop */
- do
- {
- struct IntuiMessage *msg;
-
- WaitPort(up);
- while (msg = IGetMsg(up))
- {
- APTR gl;
- USHORT entry;
- ULONG value;
-
- switch (msg->Class)
- {
- case CLOSEWINDOW:
- status = EDITOR_STATUS_QUIT;
- keepon = FALSE;
- exit = TRUE;
- break;
-
- case ISUP_ID:
- gl = (APTR) msg->SpecialLink;
- entry = msg->Code;
- value = (ULONG) msg->IAddress;
- if (gl == edit_gl)
- {
- struct Template *swap_tp;
-
- /* Perform edit gadget action */
- switch (entry)
- {
- case EDIT_GADGET_OK:
- exit = TRUE;
- break;
-
- case EDIT_GADGET_DEFAULT:
- free_template_data(tl, new_tp);
- if ((status = init_default_template_data(tl,
- new_tp, TRUE)) != EDITOR_STATUS_NORMAL)
- {
- swap_tp = old_tp;
- old_tp = new_tp;
- new_tp = swap_tp;
- }
- else
- {
- tl->tl_Flags |= TEMPLATE_LIST_FLAG_CHANGED;
- }
- exit = TRUE;
- break;
-
- case EDIT_GADGET_SWITCH:
- if (mode == EDIT_MODE_NORMAL)
- {
- new_mode = EDIT_MODE_SPECIAL;
- }
- else
- {
- new_mode = EDIT_MODE_NORMAL;
- }
- break;
-
- case EDIT_GADGET_CANCEL:
- swap_tp = old_tp;
- old_tp = new_tp;
- new_tp = swap_tp;
- exit = TRUE;
- break;
- }
- keepon = FALSE;
- }
- else
- {
-
- /* Perform data gadget action */
- if (mode == EDIT_MODE_NORMAL)
- {
- if ((status = change_normal_template_data(normal_gl,
- new_tp, entry, value)) !=
- EDITOR_STATUS_NORMAL)
- {
- keepon = FALSE;
- exit = TRUE;
- }
- }
- else
- {
- if (gl = special_gl1)
- {
- status = perform_text_list_editor_action(special_gl1,
- new_tp, entry, value);
- }
- else
- {
- status = change_special_template_data(special_gl2,
- new_tp, entry, value);
-
- }
- if (status != EDITOR_STATUS_NORMAL)
- {
- keepon = FALSE;
- exit = TRUE;
- }
- }
- tl->tl_Flags |= TEMPLATE_LIST_FLAG_CHANGED;
- }
- break;
- }
- IReplyMsg(msg);
- }
- }
- while (keepon == TRUE);
-
- IRemoveGadgets(edit_gl);
- if (mode == EDIT_MODE_NORMAL)
- {
- IRemoveGadgets(normal_gl);
- }
- else
- {
- if (special_gl1)
- {
- IRemoveGadgets(special_gl1);
- }
- if (special_gl2)
- {
- IRemoveGadgets(special_gl2);
- }
- }
- if (new_mode != mode)
- {
- mode = new_mode;
- }
- }
- while (exit == FALSE);
-
- /* Insert new template in list and free old one */
- Insert((struct List *) & tl->tl_Templates, &new_tp->tp_Node,
- &pred_tp->tp_Node);
- ISetGadgetAttributes(egl, EDITOR_GADGET_TEMPLATES, 0L, 0L,
- USE_CURRENT_VALUE, USE_CURRENT_VALUE, &tl->tl_Templates);
- free_template(tl, old_tp);
- refresh_all_templates();
- }
- return (status);
- }
-
- /* Change normal template data */
-
- SHORT
- change_normal_template_data(APTR gl, struct Template * tp, USHORT entry,
- ULONG value)
- {
- struct TemplateList *tl = &template_list;
- struct Box *box = &tp->tp_Box;
- struct BorderData *bd;
- struct TextData *td;
- struct GadgetData *gd;
- struct TextAttr *ta;
- BYTE *old_text, buffer[40];
- USHORT old_type, old_pos;
- UWORD old_size;
- SHORT status = EDITOR_STATUS_NORMAL;
-
- switch (TEMPLATE_GROUP(tp))
- {
- case TEMPLATE_GROUP_BORDER:
- bd = &tp->tp_Data.tp_BorderData;
- switch (entry)
- {
- case BORDER_GADGET_NAME:
- strcpy(&tp->tp_TemplateName[0], (BYTE *) value);
- tp->tp_Flags &= ~TEMPLATE_FLAG_DEFAULT_NAME;
- break;
-
- case BORDER_GADGET_TYPE:
- bd->bd_Type = value + 1;
- break;
- }
- break;
-
- case TEMPLATE_GROUP_TEXT:
- gd = &text_gadget_data[TEXT_GADGET_TEXT];
- td = &tp->tp_Data.tp_TextData;
- switch (entry)
- {
- case TEXT_GADGET_NAME:
- strcpy(&tp->tp_TemplateName[0], (BYTE *) value);
- tp->tp_Flags &= ~TEMPLATE_FLAG_DEFAULT_NAME;
- break;
-
- case TEXT_GADGET_TEXT:
- if (td->td_Type == TEXT_DATA_TYPE_TEXT)
- {
- old_text = td->td_Text;
- if ((status = duplicate_string((BYTE *) value,
- &td->td_Text)) != EDITOR_STATUS_NORMAL)
- {
- td->td_Text = old_text;
- }
- else
- {
- free(old_text);
- }
- }
- else
- {
- td->td_Text = (BYTE *) atol((BYTE *) value);
- }
- ISetGadgetAttributes(gl, TEXT_GADGET_TEXT, 0L, 0L,
- USE_CURRENT_VALUE, USE_CURRENT_VALUE, td->td_Text);
- break;
-
- case TEXT_GADGET_FONT:
- old_text = (BYTE *) td->td_TextAttr->ta_Name;
- if (!(ta = open_template_font_by_attributes(tl,
- (BYTE *) value, td->td_TextAttr->ta_YSize)))
- {
- DisplayBeep(NULL);
- ISetGadgetAttributes(gl, TEXT_GADGET_FONT, 0L, 0L,
- USE_CURRENT_VALUE, USE_CURRENT_VALUE, old_text);
- }
- else
- {
- if (ta->ta_YSize != td->td_TextAttr->ta_YSize)
- {
- ISetGadgetAttributes(gl, TEXT_GADGET_SIZE, 0L, 0L,
- USE_CURRENT_VALUE, USE_CURRENT_VALUE, (VOID *) ta->ta_YSize);
- }
- close_template_font(tl, td->td_TextAttr);
- td->td_TextAttr = ta;
- }
- break;
-
- case TEXT_GADGET_SIZE:
- old_size = td->td_TextAttr->ta_YSize;
- if (!(ta = open_template_font_by_attributes(tl,
- (BYTE *) td->td_TextAttr->ta_Name, (USHORT) value)))
- {
- DisplayBeep(NULL);
- ISetGadgetAttributes(gl, TEXT_GADGET_SIZE, 0L, 0L,
- USE_CURRENT_VALUE, USE_CURRENT_VALUE,
- (VOID *) old_size);
- }
- else
- {
- if (ta->ta_YSize != value)
- {
- ISetGadgetAttributes(gl, TEXT_GADGET_SIZE, 0L, 0L,
- USE_CURRENT_VALUE, USE_CURRENT_VALUE,
- (VOID *) ta->ta_YSize);
- }
- close_template_font(tl, td->td_TextAttr);
- td->td_TextAttr = ta;
- }
- break;
-
- case TEXT_GADGET_TYPE:
- old_type = td->td_Type;
- old_text = td->td_Text;
- td->td_Type = value + 1;
- gd->gd_Flags &= ~(GADGET_DATA_FLAG_STRING_UNSIGNED_DEC |
- GADGET_DATA_FLAG_STRING_SIGNED_DEC |
- GADGET_DATA_FLAG_STRING_HEX |
- GADGET_DATA_FLAG_STRING_BIN);
- if (td->td_Type == TEXT_DATA_TYPE_TEXT)
- {
- IConvertUnsignedDec((ULONG) old_text, &buffer[0], 0);
- if ((status = duplicate_string((BYTE *) & buffer[0],
- &td->td_Text)) != EDITOR_STATUS_NORMAL)
- {
- td->td_Type = old_type;
- td->td_Text = old_text;
- }
- }
- else
- {
- switch (td->td_Type)
- {
- case TEXT_DATA_TYPE_NUM_UNSIGNED_DEC:
- gd->gd_Flags |= GADGET_DATA_FLAG_STRING_UNSIGNED_DEC;
- break;
-
- case TEXT_DATA_TYPE_NUM_SIGNED_DEC:
- gd->gd_Flags |= GADGET_DATA_FLAG_STRING_SIGNED_DEC;
- break;
-
- case TEXT_DATA_TYPE_NUM_HEX:
- gd->gd_Flags |= GADGET_DATA_FLAG_STRING_HEX;
- break;
-
- case TEXT_DATA_TYPE_NUM_BIN:
- gd->gd_Flags |= GADGET_DATA_FLAG_STRING_BIN;
- break;
- }
- if (old_type == TEXT_DATA_TYPE_TEXT)
- {
- td->td_Text = (BYTE *) atol(old_text);
- free(old_text);
- }
- }
- ISetGadgetAttributes(gl, TEXT_GADGET_TEXT, 0L, 0L,
- USE_CURRENT_VALUE, USE_CURRENT_VALUE, td->td_Text);
- break;
-
- case TEXT_GADGET_BOLD:
- if (value)
- {
- td->td_Flags |= TEXT_DATA_FLAG_BOLD;
- }
- else
- {
- td->td_Flags &= ~TEXT_DATA_FLAG_BOLD;
- }
- break;
-
- case TEXT_GADGET_ITALIC:
- if (value)
- {
- td->td_Flags |= TEXT_DATA_FLAG_ITALIC;
- }
- else
- {
- td->td_Flags &= ~TEXT_DATA_FLAG_ITALIC;
- }
- break;
-
- case TEXT_GADGET_UNDERLINED:
- if (value)
- {
- td->td_Flags |= TEXT_DATA_FLAG_UNDERLINED;
- }
- else
- {
- td->td_Flags &= ~TEXT_DATA_FLAG_UNDERLINED;
- }
- break;
-
- case TEXT_GADGET_COLOR2:
- if (value)
- {
- td->td_Flags |= TEXT_DATA_FLAG_COLOR2;
- }
- else
- {
- td->td_Flags &= ~TEXT_DATA_FLAG_COLOR2;
- }
- break;
-
- case TEXT_GADGET_COMPLEMENT:
- if (value)
- {
- td->td_Flags |= TEXT_DATA_FLAG_COMPLEMENT;
- }
- else
- {
- td->td_Flags &= ~TEXT_DATA_FLAG_COMPLEMENT;
- }
- break;
- }
-
- /* Calc size of new text for template box */
- box->bo_X2 = box->bo_X1 + IPrintText(pri, pwin, td->td_Text,
- td->td_LeftEdge, td->td_TopEdge, td->td_Type,
- TEXT_DATA_FLAG_NO_PRINT, td->td_TextAttr) - 1;
- box->bo_Y2 = box->bo_Y1 + td->td_TextAttr->ta_YSize - 1;
- break;
-
- case TEMPLATE_GROUP_GADGET:
- gd = &tp->tp_Data.tp_GadgetData;
- switch (entry)
- {
- case NORMAL_GADGET_NAME:
- strcpy(&tp->tp_TemplateName[0], (BYTE *) value);
- tp->tp_Flags &= ~TEMPLATE_FLAG_DEFAULT_NAME;
- break;
-
- case NORMAL_GADGET_TEXT:
- old_text = gd->gd_Text;
- if ((status = duplicate_string((BYTE *) value,
- &gd->gd_Text)) != EDITOR_STATUS_NORMAL)
- {
- DisplayBeep(NULL);
- gd->gd_Text = old_text;
- ISetGadgetAttributes(gl, NORMAL_GADGET_TEXT, 0L, 0L,
- USE_CURRENT_VALUE, USE_CURRENT_VALUE, old_text);
- }
- else
- {
- free(old_text);
- }
- break;
-
- case NORMAL_GADGET_FONT:
- old_text = (BYTE *) gd->gd_TextAttr->ta_Name;
- if (!(ta = open_template_font_by_attributes(tl,
- (BYTE *) value, gd->gd_TextAttr->ta_YSize)))
- {
- DisplayBeep(NULL);
- ISetGadgetAttributes(gl, TEXT_GADGET_FONT, 0L, 0L,
- USE_CURRENT_VALUE, USE_CURRENT_VALUE, old_text);
- }
- else
- {
- if (ta->ta_YSize != gd->gd_TextAttr->ta_YSize)
- {
- ISetGadgetAttributes(gl, TEXT_GADGET_SIZE, 0L, 0L,
- USE_CURRENT_VALUE, USE_CURRENT_VALUE,
- (VOID *) ta->ta_YSize);
- }
- close_template_font(tl, gd->gd_TextAttr);
- gd->gd_TextAttr = ta;
- }
- break;
-
- case NORMAL_GADGET_SIZE:
- old_size = gd->gd_TextAttr->ta_YSize;
- if (!(ta = open_template_font_by_attributes(tl,
- (BYTE *) gd->gd_TextAttr->ta_Name, (USHORT) value)))
- {
- DisplayBeep(NULL);
- ISetGadgetAttributes(gl, TEXT_GADGET_SIZE, 0L, 0L,
- USE_CURRENT_VALUE, USE_CURRENT_VALUE,
- (VOID *) old_size);
- }
- else
- {
- if (ta->ta_YSize != value)
- {
- ISetGadgetAttributes(gl, TEXT_GADGET_SIZE, 0L, 0L,
- USE_CURRENT_VALUE, USE_CURRENT_VALUE,
- (VOID *) ta->ta_YSize);
- }
- close_template_font(tl, gd->gd_TextAttr);
- gd->gd_TextAttr = ta;
- }
- break;
-
- case NORMAL_GADGET_POS:
- switch (GADGET_TEXT_POS_MASK(gd->gd_Flags))
- {
- case GADGET_DATA_FLAG_TEXT_LEFT:
- old_pos = TEXT_POS_LEFT;
- break;
-
- case GADGET_DATA_FLAG_TEXT_RIGHT:
- old_pos = TEXT_POS_RIGHT;
- break;
-
- case GADGET_DATA_FLAG_TEXT_ABOVE:
- old_pos = TEXT_POS_ABOVE;
- break;
-
- case GADGET_DATA_FLAG_TEXT_BELOW:
- old_pos = TEXT_POS_BELOW;
- break;
-
- default:
- old_pos = TEXT_POS_INSIDE;
- break;
- }
-
- /* Check if text position possible for selected gadget type */
- switch (gd->gd_Type)
- {
- case GADGET_DATA_TYPE_MX:
- if (value != TEXT_POS_LEFT && value != TEXT_POS_RIGHT)
- {
- if (old_pos == TEXT_POS_RIGHT)
- {
- value = TEXT_POS_LEFT;
- }
- else
- {
- value = TEXT_POS_RIGHT;
- }
- }
- break;
-
- case GADGET_DATA_TYPE_CHECK:
- case GADGET_DATA_TYPE_STRING:
- case GADGET_DATA_TYPE_INTEGER:
- case GADGET_DATA_TYPE_SLIDER:
- case GADGET_DATA_TYPE_SCROLLER:
- case GADGET_DATA_TYPE_CYCLE:
- case GADGET_DATA_TYPE_COUNT:
- if (value == TEXT_POS_INSIDE)
- {
- if (old_pos == TEXT_POS_BELOW)
- {
- value = TEXT_POS_LEFT;
- }
- else
- {
- value = TEXT_POS_BELOW;
- }
- }
- break;
-
- case GADGET_DATA_TYPE_LISTVIEW:
- case GADGET_DATA_TYPE_PALETTE:
- if (value != TEXT_POS_ABOVE)
- {
- value = TEXT_POS_ABOVE;
- }
- break;
-
- default:
- break;
- }
- ISetGadgetAttributes(gl, NORMAL_GADGET_POS, 0L, 0L,
- USE_CURRENT_VALUE, value, (VOID *) USE_CURRENT_VALUE);
- gd->gd_Flags &= ~(GADGET_DATA_FLAG_TEXT_LEFT |
- GADGET_DATA_FLAG_TEXT_RIGHT |
- GADGET_DATA_FLAG_TEXT_ABOVE |
- GADGET_DATA_FLAG_TEXT_BELOW);
- switch (value)
- {
- case TEXT_POS_LEFT:
- gd->gd_Flags |= GADGET_DATA_FLAG_TEXT_LEFT;
- break;
-
- case TEXT_POS_RIGHT:
- gd->gd_Flags |= GADGET_DATA_FLAG_TEXT_RIGHT;
- break;
-
- case TEXT_POS_ABOVE:
- gd->gd_Flags |= GADGET_DATA_FLAG_TEXT_ABOVE;
- break;
-
- case TEXT_POS_BELOW:
- gd->gd_Flags |= GADGET_DATA_FLAG_TEXT_BELOW;
- break;
-
- case TEXT_POS_INSIDE:
- break;
- }
- break;
-
- case NORMAL_GADGET_DISABLED:
- if (value)
- {
- gd->gd_Flags |= GADGET_DATA_FLAG_DISABLED;
- }
- else
- {
- gd->gd_Flags &= ~GADGET_DATA_FLAG_DISABLED;
- }
- break;
-
- case NORMAL_GADGET_NO_BORDER:
- if (value)
- {
- gd->gd_Flags |= GADGET_DATA_FLAG_NO_BORDER;
- }
- else
- {
- gd->gd_Flags &= ~GADGET_DATA_FLAG_NO_BORDER;
- }
- break;
-
- case NORMAL_GADGET_HIGHCOMP:
- if (value)
- {
- gd->gd_Flags |= GADGET_DATA_FLAG_HIGH_COMP;
- }
- else
- {
- gd->gd_Flags &= ~GADGET_DATA_FLAG_HIGH_COMP;
- }
- break;
-
- case NORMAL_GADGET_HOTKEY:
- if (value)
- {
- gd->gd_Flags |= GADGET_DATA_FLAG_HOTKEY;
- }
- else
- {
- gd->gd_Flags &= ~GADGET_DATA_FLAG_HOTKEY;
- }
- break;
-
- case NORMAL_GADGET_COLOR2:
- if (value)
- {
- gd->gd_Flags |= GADGET_DATA_FLAG_TEXT_COLOR2;
- }
- else
- {
- gd->gd_Flags &= ~GADGET_DATA_FLAG_TEXT_COLOR2;
- }
- break;
- }
- break;
- }
- return (status);
- }
-
- /* Change special template data */
-
- SHORT
- change_special_template_data(APTR gl, struct Template * tp, USHORT entry,
- ULONG value)
- {
- SHORT status = EDITOR_STATUS_NORMAL;
-
- return (status);
- }
-